package com.qf.test.test.controller;

import com.qf.test.test.pojo.User;
import com.qf.test.test.pojo.UserVo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
//
@RequestMapping("/param")
public class ParamController {


    //演示spingMvc默认支持的接受参数类型

    /**
     * 默认支持的参数就是可以加载方法参数上 也可以不加可以按照自己的需要添加
     * HttpServletRequest,HttpSession HttpServletRespose Model
     * <p>
     * 如果contorller方法返回的String字符串 那么就认为这个字符串就是页面的路径 会自动走视图层的解析器
     * 拼接视图解释其中的前缀和后缀组装成完整的页面路径
     */
    @RequestMapping("/test1")
    public String test1(HttpServletRequest request, HttpServletResponse response, Model model) {
        String id = request.getParameter("id");
        String name = request.getParameter("name");
        System.out.println("id" + id);
        System.out.println("name" + name);
        //相当于requeset.setAttribute方法 将数据放入请求域中带到页面展示使用
        //第一个id是前端的id  第二个id是后端的作用域
        model.addAttribute("id", id);
        model.addAttribute("name", name);
        //指定返回数据并跳转到hello页面
        return "hello";

    }

    /**
     * 测试就收浏览器发送过来的基本数据：
     * 参数 integer  float  double   boolean   string等
     */
    @RequestMapping("test2")
    public String test2(Integer id, String name, Model model) {
        System.out.println("id" + id);
        System.out.println("name" + name);
        model.addAttribute("id", id);
        model.addAttribute("name", name);
        //指定返回数据并跳转到hello页面
        return "hello";
    }
/**
 * 接受pojo实体类，类型参数
 * 使用：浏览器传入的参数过多  可以将这些参数封装成书体类来进行接受
 */
@RequestMapping("/test3")
public String test3(User user, Model model) {
    System.out.println("user="+user);
    //相当于requeset.setAttribute方法 将数据放入请求域中带到页面展示使用
    //第一个id是前端的id  第二个id是后端的作用域
    model.addAttribute("user", user);

    //指定返回数据并跳转到hello页面
    return "hello";

}

    /**
     * 接受类型参数：
     * 一般页面中如果表单使用post提交，纳闷chekbox复选框提交内容 一般都是用数组
     * 纳闷要求name属性必须等于变量命
     * @param
     * @param model
     * @return
     */

    @RequestMapping("/test4")
    public String test4(String [] hobby, Model model) {
        System.out.println("hobby="+hobby);
        //相当于requeset.setAttribute方法 将数据放入请求域中带到页面展示使用
        //第一个id是前端的id  第二个id是后端的作用域
        model.addAttribute("hobby", hobby);

        //指定返回数据并跳转到hello页面
        return "hello";

    }

    /**
     * list集合
     * @param model
     * 演示接受List类型参数  一般行编辑需求的时候使用
     */

    @RequestMapping("/test5")
    public String test5(UserVo vo , Model model) {
        System.out.println("vo="+vo);
        //相当于requeset.setAttribute方法 将数据放入请求域中带到页面展示使用
        //第一个id是前端的id  第二个id是后端的作用域
//        model.addAttribute("vo", vo);

        //指定返回数据并跳转到hello页面
        return "hello";

    }

    /**
     * 演示接受restful风格参数
     * 访问路径：http//localhost:8080/类的路径/1张三
     * @param id
     * @param name
     * @return
     */
    @RequestMapping("/test6/{id}/{name}")
    public String test5(@PathVariable("id") Integer id,
                        @PathVariable("name") String name   ) {
        System.out.println("================"+id+name);
        //指定返回数据并跳转嗲hello页面
        return "hello";

    }

    /**
     * 演示请求转发
     * @param id
     * @param name
     * @param request
     * @param model
     * @return
     */
    @RequestMapping("/test7")
    public String test7(Integer id, String name, HttpServletRequest request,
    Model model) {
        System.out.println("================"+id+name);
        //将参数防止到request请求域中 用于带到转发后的方法中使用
//        request.setAttribute("id",id);
//        request.setAttribute("name",name);
        //将参数方法Model域中
        model.addAttribute("id",id);
        model.addAttribute("name",name);
        //指定返回数据并跳转到hello页面
        return "forward:/param/test3";


    }

    /**
     * 演示重定向
     * @param id
     * @param name
     * @param request
     * @param model
     * @return
     */
    @RequestMapping("/test8")
    public String test8(Integer id, String name, HttpServletRequest request,
                        Model model) {
        System.out.println("================"+id+name);
        //将参数防止到request请求域中 用于带到转发后的方法中使用
//        request.setAttribute("id",id);
//        request.setAttribute("name",name);
        //将参数方法Model域中
        model.addAttribute("id",id);
        model.addAttribute("name",name);
        //指定返回数据并跳转到hello页面
        return "redirect:http://www.baidu.com";


    }



}
